exports 和 module.exports 的区别
ECMAScript的变量值类型共有两种:
基本类型 (primitive values) : 包括Undefined, Null, Boolean, Number和String五种基本数据类型;
引用类型 (reference values) : 保存在内存中的对象们,不能直接操作,只能通过保存在变量中的地址引用对其进行操作。
exports
和 module.exports
就是 Object
类型,属于引用类型。
而 exports
其实就是 module.exports
的引用。
1 | var exports = module.exports; |
平时我们可以这样使用:
1 | exports.area = function (r) { |
注意,不能直接将exports变量指向一个值,因为这样等于切断了exports与module.exports的联系。
1 | exports = function(x) {console.log(x)}; |
上面这样的写法是无效的,因为 exports
不再指向 module.exports
了。
下面的写法也是无效的。
1 | exports.hello = function() { |
上面代码中,hello函数是无法对外输出的,因为module.exports被重新赋值了。
这意味着,如果一个模块的对外接口,就是一个单一的值,不能使用exports输出,只能使用module.exports输出。
1 | // 正确的写法 |
如果觉得,分不清exports与module.exports,可以选择放弃使用exports,只使用module.exports。